package com.zenith.middleware.feign.edu;

import com.zenith.common.annotation.request.SecurePostMapping;
import com.zenith.common.result.Result;
import com.zenith.middleware.po.dto.edu.*;
import com.zenith.middleware.po.vo.edu.*;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 教育服务Feign客户端
 */
@FeignClient(url = "/api/edu", name = "zenith-edu-service", contextId = "middleware-edu-client")
public interface EduServiceFeignClient {
    
    // =========================== 课程管理相关接口 ===========================
    
    @SecurePostMapping(value = "/course/createCourse", roles = "ROLE_ADMIN", permission = "course:create")
    @Operation(summary = "创建课程")
    Result<EduCourseVO> createCourse(@RequestBody EduCourseDTO dto);

    @SecurePostMapping(value = "/course/getCourseById/{id}", roles = "ROLE_ADMIN", permission = "course:query")
    @Operation(summary = "根据ID获取课程详情")
    Result<EduCourseVO> getCourseById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/course/updateCourse", roles = "ROLE_ADMIN", permission = "course:update")
    @Operation(summary = "更新课程信息")
    Result<EduCourseVO> updateCourse(@RequestBody EduCourseDTO dto);

    @SecurePostMapping(value = "/course/deleteCourse/{id}", roles = "ROLE_ADMIN", permission = "course:delete")
    @Operation(summary = "删除指定课程")
    Result<Void> deleteCourse(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/course/getCourseList", roles = "ROLE_ADMIN", permission = "course:read")
    @Operation(summary = "获取课程列表")
    Result<List<EduCourseVO>> getCourseList();

    // =========================== 班级管理相关接口 ===========================

    @SecurePostMapping(value = "/class/createClass", roles = "ADMIN", permission = "class:create")
    @Operation(summary = "创建班级")
    Result<EduClassVO> createClass(@RequestBody EduClassDTO dto);

    @SecurePostMapping(value = "/class/getClassById/{id}", roles = "ADMIN", permission = "class:query")
    @Operation(summary = "根据ID获取班级详情")
    Result<EduClassVO> getClassById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/class/updateClass", roles = "ADMIN", permission = "class:update")
    @Operation(summary = "更新班级信息")
    Result<EduClassVO> updateClass(@RequestBody EduClassDTO dto);

    @SecurePostMapping(value = "/class/deleteClass/{id}", roles = "ADMIN", permission = "class:delete")
    @Operation(summary = "删除指定班级")
    Result<Void> deleteClass(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/class/getClassList", roles = {"ADMIN"}, permission = "class:read")
    @Operation(summary = "获取班级列表")
    Result<List<EduClassVO>> getClassList();

    // =========================== 学生管理相关接口 ===========================

    @SecurePostMapping(value = "/student/createStudent", roles = "ROLE_ADMIN", permission = "student:create")
    @Operation(summary = "创建学生")
    Result<EduStudentVO> createStudent(@RequestBody EduStudentDTO dto);

    @SecurePostMapping(value = "/student/getStudentById/{id}", roles = "ROLE_ADMIN", permission = "student:read")
    @Operation(summary = "根据ID获取学生详情")
    Result<EduStudentVO> getStudentById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/student/updateStudent", roles = "ROLE_ADMIN", permission = "student:update")
    @Operation(summary = "更新学生信息")
    Result<EduStudentVO> updateStudent(@RequestBody EduStudentDTO dto);

    @SecurePostMapping(value = "/student/deleteStudent/{id}", roles = "ROLE_ADMIN", permission = "student:delete")
    @Operation(summary = "删除指定学生")
    Result<Void> deleteStudent(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/student/getStudentList", roles = "ROLE_ADMIN", permission = "student:read")
    @Operation(summary = "获取学生列表")
    Result<List<EduStudentVO>> getStudentList();

    // =========================== 教师管理相关接口 ===========================

    @SecurePostMapping(value = "/teacher/createTeacher", roles = "ROLE_ADMIN", permission = "teacher:create")
    @Operation(summary = "创建教师")
    Result<EduTeacherVO> createTeacher(@RequestBody EduTeacherDTO dto);

    @SecurePostMapping(value = "/teacher/getTeacherById/{id}", roles = "ROLE_ADMIN", permission = "teacher:read")
    @Operation(summary = "根据ID获取教师详情")
    Result<EduTeacherVO> getTeacherById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/teacher/updateTeacher", roles = "ROLE_ADMIN", permission = "teacher:update")
    @Operation(summary = "更新教师信息")
    Result<EduTeacherVO> updateTeacher(@RequestBody EduTeacherDTO dto);

    @SecurePostMapping(value = "/teacher/deleteTeacher/{id}", roles = "ROLE_ADMIN", permission = "teacher:delete")
    @Operation(summary = "删除指定教师")
    Result<Void> deleteTeacher(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/teacher/getTeacherList", roles = "ROLE_ADMIN", permission = "teacher:read")
    @Operation(summary = "获取教师列表")
    Result<List<EduTeacherVO>> getTeacherList();

    // =========================== 作业管理相关接口 ===========================

    @SecurePostMapping(value = "/assignment/createAssignment", roles = {"ADMIN"}, permission = "assignment:create")
    @Operation(summary = "创建作业")
    Result<EduAssignmentVO> createAssignment(@RequestBody EduAssignmentDTO dto);

    @SecurePostMapping(value = "/assignment/getAssignmentById/{id}", roles = {"ADMIN"}, permission = "assignment:retrieve")
    @Operation(summary = "根据ID获取作业详情")
    Result<EduAssignmentVO> getAssignmentById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/assignment/updateAssignment", roles = {"ADMIN"}, permission = "assignment:update")
    @Operation(summary = "更新作业信息")
    Result<EduAssignmentVO> updateAssignment(@RequestBody EduAssignmentDTO dto);

    @SecurePostMapping(value = "/assignment/deleteAssignment/{id}", roles = {"ADMIN"}, permission = "deleteAssignment")
    @Operation(summary = "删除指定作业")
    Result<Void> deleteAssignment(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/assignment/getAssignmentList", roles = {"ADMIN"}, permission = "assignment:retrieve")
    @Operation(summary = "获取作业列表")
    Result<List<EduAssignmentVO>> getAssignmentList();

    // =========================== 作业题目管理相关接口 ===========================

    @SecurePostMapping(value = "/assignment-question/createAssignmentQuestion", roles = {"ADMIN"}, permission = "assignment-question:create")
    @Operation(summary = "创建作业题目")
    Result<EduAssignmentQuestionVO> createAssignmentQuestion(@RequestBody EduAssignmentQuestionDTO dto);

    @SecurePostMapping(value = "/assignment-question/{id}", roles = "ROLE_ADMIN", permission = "role:read")
    @Operation(summary = "根据ID获取作业题目详情")
    Result<EduAssignmentQuestionVO> getAssignmentQuestionById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/assignment-question/updateAssignmentQuestion", roles = {"ADMIN"}, permission = "assignment-question:update")
    @Operation(summary = "更新作业题目信息")
    Result<EduAssignmentQuestionVO> updateAssignmentQuestion(@RequestBody EduAssignmentQuestionDTO dto);

    @SecurePostMapping(value = "/assignment-question/deleteAssignmentQuestion/{id}", roles = {"ADMIN"}, permission = "assignment-question:delete")
    @Operation(summary = "删除指定作业题目")
    Result<Void> deleteAssignmentQuestion(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/assignment-question/listAssignmentQuestion", roles = "ROLE_ADMIN", permission = "assignmentQuestion:read")
    @Operation(summary = "获取作业题目列表")
    Result<List<EduAssignmentQuestionVO>> getAssignmentQuestionList();

    // =========================== 作业提交管理相关接口 ===========================

    @SecurePostMapping(value = "/assignment-submission/createAssignmentSubmission", roles = {"ADMIN"}, permission = "assignment:create")
    @Operation(summary = "创建作业提交")
    Result<EduAssignmentSubmissionVO> createAssignmentSubmission(@RequestBody EduAssignmentSubmissionDTO dto);

    @SecurePostMapping(value = "/assignment-submission/getAssignmentSubmissionById/{id}", roles = {"ADMIN"}, permission = "assignment-submission:retrieve")
    @Operation(summary = "根据ID获取作业提交详情")
    Result<EduAssignmentSubmissionVO> getAssignmentSubmissionById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/assignment-submission/updateAssignmentSubmission", roles = {"ADMIN"}, permission = "assignment:update")
    @Operation(summary = "更新作业提交信息")
    Result<EduAssignmentSubmissionVO> updateAssignmentSubmission(@RequestBody EduAssignmentSubmissionDTO dto);

    @SecurePostMapping(value = "/assignment-submission/deleteAssignmentSubmission/{id}", roles = {"ADMIN"}, permission = "assignment-submission:delete")
    @Operation(summary = "删除指定作业提交")
    Result<Void> deleteAssignmentSubmission(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/assignment-submission/getAssignmentSubmissionList", roles = {"ADMIN"}, permission = "assignment:list")
    @Operation(summary = "获取作业提交列表")
    Result<List<EduAssignmentSubmissionVO>> getAssignmentSubmissionList();

    // =========================== 证书管理相关接口 ===========================

    @SecurePostMapping(value = "/certificate/createCertificate", roles = {"ADMIN"}, permission = "certificate:create")
    @Operation(summary = "创建证书")
    Result<EduCertificateVO> createCertificate(@RequestBody EduCertificateDTO dto);

    @SecurePostMapping(value = "/certificate/getCertificateById/{id}", roles = {"ADMIN"}, permission = "certificate:retrieve")
    @Operation(summary = "根据ID获取证书详情")
    Result<EduCertificateVO> getCertificateById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/certificate/updateCertificate", roles = {"ADMIN"}, permission = "certificate:update")
    @Operation(summary = "更新证书信息")
    Result<EduCertificateVO> updateCertificate(@RequestBody EduCertificateDTO dto);

    @SecurePostMapping(value = "/certificate/deleteCertificate/{id}", roles = {"ADMIN"}, permission = "certificate:delete")
    @Operation(summary = "删除指定证书")
    Result<Void> deleteCertificate(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/certificate/getCertificateList", roles = {"ADMIN"}, permission = "certificate:read")
    @Operation(summary = "获取证书列表")
    Result<List<EduCertificateVO>> getCertificateList();

    // =========================== 章节管理相关接口 ===========================

    @SecurePostMapping(value = "/chapter/createChapter", roles = {"ADMIN"}, permission = "chapter:create")
    @Operation(summary = "创建章节")
    Result<EduChapterVO> createChapter(@RequestBody EduChapterDTO dto);

    @SecurePostMapping(value = "/chapter/getChapterById/{id}", roles = {"ADMIN"}, permission = "chapter:retrieve")
    @Operation(summary = "根据ID获取章节详情")
    Result<EduChapterVO> getChapterById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/chapter/updateChapter", roles = {"ADMIN"}, permission = "chapter:update")
    @Operation(summary = "更新章节信息")
    Result<EduChapterVO> updateChapter(@RequestBody EduChapterDTO dto);

    @SecurePostMapping(value = "/chapter/deleteChapter/{id}", roles = {"ADMIN"}, permission = "chapter:delete")
    @Operation(summary = "删除指定章节")
    Result<Void> deleteChapter(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/chapter/list", roles = {"ADMIN"}, permission = "chapter:read")
    @Operation(summary = "获取章节列表")
    Result<List<EduChapterVO>> getChapterList();

    @SecurePostMapping(value = "/chapter/getChaptersByCourseId/{courseId}", roles = "ROLE_ADMIN", permission = "role:read")
    @Operation(summary = "根据课程ID获取章节列表")
    Result<List<EduChapterVO>> getChaptersByCourseId(@PathVariable Long courseId);

    // =========================== 签到管理相关接口 ===========================

    @SecurePostMapping(value = "/checkin/createCheckin", roles = {"ADMIN"}, permission = "checkin:create")
    @Operation(summary = "创建签到")
    Result<EduCheckinVO> createCheckin(@RequestBody EduCheckinDTO dto);

    @SecurePostMapping(value = "/checkin/getCheckinById/{id}", roles = {"ADMIN"}, permission = "checkin:retrieve")
    @Operation(summary = "根据ID获取签到详情")
    Result<EduCheckinVO> getCheckinById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/checkin/updateCheckin", roles = {"ADMIN"}, permission = "checkin:update")
    @Operation(summary = "更新签到信息")
    Result<EduCheckinVO> updateCheckin(@RequestBody EduCheckinDTO dto);

    @SecurePostMapping(value = "/checkin/deleteCheckin/{id}", roles = {"ADMIN"}, permission = "checkin:delete")
    @Operation(summary = "删除指定签到")
    Result<Void> deleteCheckin(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/checkin/getCheckinList", roles = {"ADMIN"}, permission = "checkin:read")
    @Operation(summary = "获取签到列表")
    Result<List<EduCheckinVO>> getCheckinList();

    // =========================== 签到记录管理相关接口 ===========================

    @SecurePostMapping(value = "/checkin-record/createCheckinRecord", roles = {"ADMIN"}, permission = "checkin-record:create")
    @Operation(summary = "创建签到记录")
    Result<EduCheckinRecordVO> createCheckinRecord(@RequestBody EduCheckinRecordDTO dto);

    @SecurePostMapping(value = "/checkin-record/getCheckinRecordById/{id}", roles = {"ADMIN"}, permission = "checkin-record:retrieve")
    @Operation(summary = "根据ID获取签到记录详情")
    Result<EduCheckinRecordVO> getCheckinRecordById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/checkin-record/updateCheckinRecord", roles = {"ADMIN"}, permission = "checkinRecord:update")
    @Operation(summary = "更新签到记录信息")
    Result<EduCheckinRecordVO> updateCheckinRecord(@RequestBody EduCheckinRecordDTO dto);

    @SecurePostMapping(value = "/checkin-record/deleteCheckinRecord/{id}", roles = {"ADMIN"}, permission = "checkinRecord:delete")
    @Operation(summary = "删除指定签到记录")
    Result<Void> deleteCheckinRecord(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/checkin-record/getCheckinRecordList", roles = {"ADMIN"}, permission = "checkinRecord:read")
    @Operation(summary = "获取签到记录列表")
    Result<List<EduCheckinRecordVO>> getCheckinRecordList();

    // =========================== 课程班级关系管理相关接口 ===========================

    @SecurePostMapping(value = "/course-class/createCourseClass", roles = "ROLE_ADMIN", permission = "course-class:create")
    @Operation(summary = "创建课程班级关系")
    Result<EduCourseClassVO> createCourseClass(@RequestBody EduCourseClassDTO dto);

    @SecurePostMapping(value = "/course-class/getCourseClassById/{id}", roles = {"ADMIN"}, permission = "course-class:retrieve")
    @Operation(summary = "根据ID获取课程班级详情")
    Result<EduCourseClassVO> getCourseClassById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/course-class/updateCourseClass", roles = "ROLE_ADMIN", permission = "course-class:update")
    @Operation(summary = "更新课程班级关系信息")
    Result<EduCourseClassVO> updateCourseClass(@RequestBody EduCourseClassDTO dto);

    @SecurePostMapping(value = "/course-class/deleteCourseClass/{id}", roles = {"ADMIN"}, permission = "course-class:delete")
    @Operation(summary = "删除指定课程班级")
    Result<Void> deleteCourseClass(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/course-class/getCourseClassList", roles = "ROLE_ADMIN", permission = "course-class:read")
    @Operation(summary = "获取课程班级关系列表")
    Result<List<EduCourseClassVO>> getCourseClassList();

    // =========================== 课程评价管理相关接口 ===========================

    @SecurePostMapping(value = "/course-rating/createCourseRating", roles = {"ADMIN"}, permission = "courseRating:create")
    @Operation(summary = "创建课程评价")
    Result<EduCourseRatingVO> createCourseRating(@RequestBody EduCourseRatingDTO dto);

    @SecurePostMapping(value = "/course-rating/{id}", roles = {"ADMIN"}, permission = "courseRating:read")
    @Operation(summary = "根据ID获取课程评价详情")
    Result<EduCourseRatingVO> getCourseRatingById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/course-rating/updateCourseRating", roles = {"ADMIN"}, permission = "courseRating:update")
    @Operation(summary = "更新课程评价信息")
    Result<EduCourseRatingVO> updateCourseRating(@RequestBody EduCourseRatingDTO dto);

    @SecurePostMapping(value = "/course-rating/deleteCourseRating/{id}", roles = "ADMIN", permission = "courseRating:delete")
    @Operation(summary = "删除指定课程评价")
    Result<Void> deleteCourseRating(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/course-rating/getCourseRatingList", roles = {"ADMIN"}, permission = "courseRating:read")
    @Operation(summary = "获取课程评价列表")
    Result<List<EduCourseRatingVO>> getCourseRatingList();

    // =========================== 课程选课管理相关接口 ===========================

    @SecurePostMapping(value = "/course-selection/createCourseSelection", roles = {"ADMIN"}, permission = "courseSelection:create")
    @Operation(summary = "创建课程选课")
    Result<EduCourseSelectionVO> createCourseSelection(@RequestBody EduCourseSelectionDTO dto);

    @SecurePostMapping(value = "/course-selection/getCourseSelectionById/{id}", roles = {"ADMIN"}, permission = "course-selection:retrieve")
    @Operation(summary = "根据ID获取选课详情")
    Result<EduCourseSelectionVO> getCourseSelectionById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/course-selection/updateCourseSelection", roles = {"ADMIN"}, permission = "course-selection:update")
    @Operation(summary = "更新课程选课信息")
    Result<EduCourseSelectionVO> updateCourseSelection(@RequestBody EduCourseSelectionDTO dto);

    @SecurePostMapping(value = "/course-selection/deleteCourseSelection/{id}", roles = {"ADMIN"}, permission = "course-selection:delete")
    @Operation(summary = "删除指定选课")
    Result<Void> deleteCourseSelection(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/course-selection/getCourseSelectionList", roles = {"ADMIN"}, permission = "courseSelection:read")
    @Operation(summary = "获取课程选课列表")
    Result<List<EduCourseSelectionVO>> getCourseSelectionList();

    // =========================== 学分管理相关接口 ===========================

    @SecurePostMapping(value = "/credit/createCredit", roles = "ROLE_ADMIN", permission = "credit:create")
    @Operation(summary = "创建学分")
    Result<EduCreditVO> createCredit(@RequestBody EduCreditDTO dto);

    @SecurePostMapping(value = "/credit/getCreditById/{id}", roles = {"ADMIN"}, permission = "credit:retrieve")
    @Operation(summary = "根据ID获取学分详情")
    Result<EduCreditVO> getCreditById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/credit/updateCredit", roles = "ROLE_ADMIN", permission = "credit:update")
    @Operation(summary = "更新学分信息")
    Result<EduCreditVO> updateCredit(@RequestBody EduCreditDTO dto);

    @SecurePostMapping(value = "/credit/deleteCredit/{id}", roles = {"ADMIN"}, permission = "credit:delete")
    @Operation(summary = "删除指定学分")
    Result<Void> deleteCredit(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/credit/getCreditList", roles = "ROLE_ADMIN", permission = "credit:read")
    @Operation(summary = "获取学分列表")
    Result<List<EduCreditVO>> getCreditList();

    // =========================== 院系管理相关接口 ===========================

    @SecurePostMapping(value = "/department/createDepartment", roles = "ROLE_ADMIN", permission = "department:create")
    @Operation(summary = "创建院系")
    Result<EduDepartmentVO> createDepartment(@RequestBody EduDepartmentDTO dto);

    @SecurePostMapping(value = "/department/getDepartmentById/{id}", roles = {"ADMIN"}, permission = "department:retrieve")
    @Operation(summary = "根据ID获取部门详情")
    Result<EduDepartmentVO> getDepartmentById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/department/updateDepartment", roles = "ROLE_ADMIN", permission = "department:update")
    @Operation(summary = "更新院系信息")
    Result<EduDepartmentVO> updateDepartment(@RequestBody EduDepartmentDTO dto);

    @SecurePostMapping(value = "/department/deleteDepartment/{id}", roles = {"ADMIN"}, permission = "department:delete")
    @Operation(summary = "删除指定部门")
    Result<Void> deleteDepartment(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/department/getDepartmentList", roles = "ROLE_ADMIN", permission = "department:read")
    @Operation(summary = "获取院系列表")
    Result<List<EduDepartmentVO>> getDepartmentList();

    // =========================== 考试记录管理相关接口 ===========================

    @SecurePostMapping(value = "/exam-record/createExamRecord", roles = "ROLE_ADMIN", permission = "examRecord:create")
    @Operation(summary = "创建考试记录")
    Result<EduExamRecordVO> createExamRecord(@RequestBody EduExamRecordDTO dto);

    @SecurePostMapping(value = "/exam-record/getExamRecordById/{id}", roles = {"ADMIN"}, permission = "exam-record:retrieve")
    @Operation(summary = "根据ID获取考试记录详情")
    Result<EduExamRecordVO> getExamRecordById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/exam-record/updateExamRecord", roles = "ROLE_ADMIN", permission = "examRecord:update")
    @Operation(summary = "更新考试记录信息")
    Result<EduExamRecordVO> updateExamRecord(@RequestBody EduExamRecordDTO dto);

    @SecurePostMapping(value = "/exam-record/deleteExamRecord/{id}", roles = {"ADMIN"}, permission = "examRecord:delete")
    @Operation(summary = "删除指定考试记录")
    Result<Void> deleteExamRecord(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/exam-record/getExamRecordList", roles = "ROLE_ADMIN", permission = "examRecord:read")
    @Operation(summary = "获取考试记录列表")
    Result<List<EduExamRecordVO>> getExamRecordList();

    // =========================== 论坛点赞管理相关接口 ===========================

    @SecurePostMapping(value = "/forum-like/createForumLike", roles = "ROLE_ADMIN", permission = "forum-like:create")
    @Operation(summary = "创建论坛点赞记录")
    Result<EduForumLikeVO> createForumLike(@RequestBody EduForumLikeDTO dto);

    @SecurePostMapping(value = "/forum-like/getForumLikeById/{id}", roles = {"ADMIN"}, permission = "forum-like:retrieve")
    @Operation(summary = "根据ID获取论坛点赞记录详情")
    Result<EduForumLikeVO> getForumLikeById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/forum-like/updateForumLike", roles = "ROLE_ADMIN", permission = "forum-like:update")
    @Operation(summary = "更新论坛点赞记录信息")
    Result<EduForumLikeVO> updateForumLike(@RequestBody EduForumLikeDTO dto);

    @SecurePostMapping(value = "/forum-like/deleteForumLike/{id}", roles = {"ADMIN"}, permission = "forum-like:delete")
    @Operation(summary = "删除指定论坛点赞记录")
    Result<Void> deleteForumLike(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/forum-like/getForumLikeList", roles = "ROLE_ADMIN", permission = "forum-like:read")
    @Operation(summary = "获取论坛点赞记录列表")
    Result<List<EduForumLikeVO>> getForumLikeList();

    // =========================== 论坛回复管理相关接口 ===========================

    @SecurePostMapping(value = "/forum-reply/createForumReply", roles = "ROLE_ADMIN", permission = "forum-reply:create")
    @Operation(summary = "创建论坛回复")
    Result<EduForumReplyVO> createForumReply(@RequestBody EduForumReplyDTO dto);

    @SecurePostMapping(value = "/forum-reply/getForumReplyById/{id}", roles = {"ADMIN"}, permission = "forum-reply:retrieve")
    @Operation(summary = "根据ID获取论坛回复详情")
    Result<EduForumReplyVO> getForumReplyById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/forum-reply/updateForumReply", roles = "ROLE_ADMIN", permission = "forum-reply:update")
    @Operation(summary = "更新论坛回复信息")
    Result<EduForumReplyVO> updateForumReply(@RequestBody EduForumReplyDTO dto);

    @SecurePostMapping(value = "/forum-reply/deleteForumReply/{id}", roles = {"ADMIN"}, permission = "forum-reply:delete")
    @Operation(summary = "删除指定论坛回复")
    Result<Void> deleteForumReply(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/forum-reply/getForumReplyList", roles = "ROLE_ADMIN", permission = "forum-reply:read")
    @Operation(summary = "获取论坛回复列表")
    Result<List<EduForumReplyVO>> getForumReplyList();

    // =========================== 论坛主题管理相关接口 ===========================

    @SecurePostMapping(value = "/forum-topic/createForumTopic", roles = "ROLE_ADMIN", permission = "forum-topic:create")
    @Operation(summary = "创建论坛主题")
    Result<EduForumTopicVO> createForumTopic(@RequestBody EduForumTopicDTO dto);

    @SecurePostMapping(value = "/forum-topic/getForumTopicById/{id}", roles = {"ADMIN"}, permission = "forum-topic:retrieve")
    @Operation(summary = "根据ID获取论坛主题详情")
    Result<EduForumTopicVO> getForumTopicById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/forum-topic/updateForumTopic", roles = "ROLE_ADMIN", permission = "forum-topic:update")
    @Operation(summary = "更新论坛主题信息")
    Result<EduForumTopicVO> updateForumTopic(@RequestBody EduForumTopicDTO dto);

    @SecurePostMapping(value = "/forum-topic/deleteForumTopic/{id}", roles = {"ADMIN"}, permission = "forum-topic:delete")
    @Operation(summary = "删除指定论坛主题")
    Result<Void> deleteForumTopic(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/forum-topic/getForumTopicList", roles = "ROLE_ADMIN", permission = "forum-topic:read")
    @Operation(summary = "获取论坛主题列表")
    Result<List<EduForumTopicVO>> getForumTopicList();

    // =========================== 知识点管理相关接口 ===========================

    @SecurePostMapping(value = "/knowledge-point/createKnowledgePoint", roles = "ROLE_ADMIN", permission = "knowledge-point:create")
    @Operation(summary = "创建知识点")
    Result<EduKnowledgePointVO> createKnowledgePoint(@RequestBody EduKnowledgePointDTO dto);

    @SecurePostMapping(value = "/knowledge-point/getKnowledgePointById/{id}", roles = {"ADMIN"}, permission = "knowledge-point:retrieve")
    @Operation(summary = "根据ID获取知识点详情")
    Result<EduKnowledgePointVO> getKnowledgePointById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/knowledge-point/updateKnowledgePoint", roles = "ROLE_ADMIN", permission = "knowledge-point:update")
    @Operation(summary = "更新知识点信息")
    Result<EduKnowledgePointVO> updateKnowledgePoint(@RequestBody EduKnowledgePointDTO dto);

    @SecurePostMapping(value = "/knowledge-point/deleteKnowledgePoint/{id}", roles = {"ADMIN"}, permission = "knowledge-point:delete")
    @Operation(summary = "删除指定知识点")
    Result<Void> deleteKnowledgePoint(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/knowledge-point/getKnowledgePointList", roles = "ROLE_ADMIN", permission = "knowledge-point:read")
    @Operation(summary = "获取知识点列表")
    Result<List<EduKnowledgePointVO>> getKnowledgePointList();

    // =========================== 直播课堂管理相关接口 ===========================

    @SecurePostMapping(value = "/live-session/createLiveSession", roles = "ROLE_ADMIN", permission = "live-session:create")
    @Operation(summary = "创建直播课堂")
    Result<EduLiveSessionVO> createLiveSession(@RequestBody EduLiveSessionDTO dto);

    @SecurePostMapping(value = "/live-session/getLiveSessionById/{id}", roles = {"ADMIN"}, permission = "live-session:retrieve")
    @Operation(summary = "根据ID获取直播详情")
    Result<EduLiveSessionVO> getLiveSessionById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/live-session/updateLiveSession", roles = "ROLE_ADMIN", permission = "live-session:update")
    @Operation(summary = "更新直播课堂信息")
    Result<EduLiveSessionVO> updateLiveSession(@RequestBody EduLiveSessionDTO dto);

    @SecurePostMapping(value = "/live-session/deleteLiveSession/{id}", roles = {"ADMIN"}, permission = "live-session:delete")
    @Operation(summary = "删除指定直播")
    Result<Void> deleteLiveSession(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/live-session/getLiveSessionList", roles = "ROLE_ADMIN", permission = "live-session:read")
    @Operation(summary = "获取直播课堂列表")
    Result<List<EduLiveSessionVO>> getLiveSessionList();

    // =========================== 直播观看记录管理相关接口 ===========================

    @SecurePostMapping(value = "/live-watch-record/createLiveWatchRecord", roles = "ROLE_ADMIN", permission = "live-watch-record:create")
    @Operation(summary = "创建直播观看记录")
    Result<EduLiveWatchRecordVO> createLiveWatchRecord(@RequestBody EduLiveWatchRecordDTO dto);

    @SecurePostMapping(value = "/live-watch-record/getLiveWatchRecordById/{id}", roles = {"ADMIN"}, permission = "live-watch-record:retrieve")
    @Operation(summary = "根据ID获取直播观看记录详情")
    Result<EduLiveWatchRecordVO> getLiveWatchRecordById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/live-watch-record/deleteLiveWatchRecord/{id}", roles = {"ADMIN"}, permission = "live-watch-record:delete")
    @Operation(summary = "删除指定直播观看记录")
    Result<Void> deleteLiveWatchRecord(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/live-watch-record/list")
    @Operation(summary = "获取直播观看记录列表")
    Result<List<EduLiveWatchRecordVO>> getLiveWatchRecordList();

    // =========================== 专业管理相关接口 ===========================

    @SecurePostMapping(value = "/major/createMajor", roles = "ROLE_ADMIN", permission = "major:create")
    @Operation(summary = "创建专业")
    Result<EduMajorVO> createMajor(@RequestBody EduMajorDTO dto);

    @SecurePostMapping(value = "/major/getMajorById/{id}", roles = {"ADMIN"}, permission = "major:retrieve")
    @Operation(summary = "根据ID获取专业详情")
    Result<EduMajorVO> getMajorById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/major/deleteMajor/{id}", roles = {"ADMIN"}, permission = "major:delete")
    @Operation(summary = "删除指定专业")
    Result<Void> deleteMajor(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/major/getMajorList", roles = "ROLE_ADMIN", permission = "major:read")
    @Operation(summary = "获取专业列表")
    Result<List<EduMajorVO>> getMajorList();

    // =========================== 学习进度管理相关接口 ===========================

    @SecurePostMapping(value = "/progress/createProgress", roles = "ROLE_ADMIN", permission = "progress:create")
    @Operation(summary = "创建学习进度")
    Result<EduProgressVO> createProgress(@RequestBody EduProgressDTO dto);

    @SecurePostMapping(value = "/progress/getProgressById/{id}", roles = {"ADMIN"}, permission = "progress:retrieve")
    @Operation(summary = "根据ID获取进度详情")
    Result<EduProgressVO> getProgressById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/progress/deleteProgress/{id}", roles = {"ADMIN"}, permission = "progress:delete")
    @Operation(summary = "删除指定进度")
    Result<Void> deleteProgress(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/progress/getProgressList", roles = "ROLE_ADMIN", permission = "progress:read")
    @Operation(summary = "获取学习进度列表")
    Result<List<EduProgressVO>> getProgressList();

    // =========================== 题库管理相关接口 ===========================

    @SecurePostMapping(value = "/question-bank/createQuestionBank", roles = "ROLE_ADMIN", permission = "question-bank:create")
    @Operation(summary = "创建题库")
    Result<EduQuestionBankVO> createQuestionBank(@RequestBody EduQuestionBankDTO dto);

    @SecurePostMapping(value = "/question-bank/getQuestionBankById/{id}", roles = {"ADMIN"}, permission = "question-bank:retrieve")
    @Operation(summary = "根据ID获取题库详情")
    Result<EduQuestionBankVO> getQuestionBankById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/question-bank/updateQuestionBank", roles = "ROLE_ADMIN", permission = "question-bank:update")
    @Operation(summary = "更新题库信息")
    Result<EduQuestionBankVO> updateQuestionBank(@RequestBody EduQuestionBankDTO dto);

    @SecurePostMapping(value = "/question-bank/deleteQuestionBank/{id}", roles = {"ADMIN"}, permission = "question-bank:delete")
    @Operation(summary = "删除指定题库")
    Result<Void> deleteQuestionBank(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/question-bank/getQuestionBankList", roles = "ROLE_ADMIN", permission = "question-bank:read")
    @Operation(summary = "获取题库列表")
    Result<List<EduQuestionBankVO>> getQuestionBankList();

    // =========================== 题目管理相关接口 ===========================

    @SecurePostMapping(value = "/question/createQuestion", roles = "ROLE_ADMIN", permission = "question:create")
    @Operation(summary = "创建题目")
    Result<EduQuestionVO> createQuestion(@RequestBody EduQuestionDTO dto);

    @SecurePostMapping(value = "/question/getQuestionById/{id}", roles = {"ADMIN"}, permission = "question:retrieve")
    @Operation(summary = "根据ID获取题目详情")
    Result<EduQuestionVO> getQuestionById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/question/deleteQuestion/{id}", roles = {"ADMIN"}, permission = "question:delete")
    @Operation(summary = "删除指定题目")
    Result<Void> deleteQuestion(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/question/getQuestionList", roles = "ROLE_ADMIN", permission = "question:read")
    @Operation(summary = "获取题目列表")
    Result<List<EduQuestionVO>> getQuestionList();

    // =========================== 课程评价点赞管理相关接口 ===========================

    @SecurePostMapping(value = "/rating-like/createRatingLike", roles = "ROLE_ADMIN", permission = "rating-like:create")
    @Operation(summary = "创建课程评价点赞记录")
    Result<EduRatingLikeVO> createRatingLike(@RequestBody EduRatingLikeDTO dto);

    @SecurePostMapping(value = "/rating-like/getRatingLikeById/{id}", roles = {"ADMIN"}, permission = "rating-like:retrieve")
    @Operation(summary = "根据ID获取评分点赞详情")
    Result<EduRatingLikeVO> getRatingLikeById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/rating-like/deleteRatingLike/{id}", roles = {"ADMIN"}, permission = "rating-like:delete")
    @Operation(summary = "删除指定评分点赞")
    Result<Void> deleteRatingLike(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/rating-like/getRatingLikeList", roles = "ROLE_ADMIN", permission = "rating-like:read")
    @Operation(summary = "获取课程评价点赞记录列表")
    Result<List<EduRatingLikeVO>> getRatingLikeList();

    // =========================== 课程资源管理相关接口 ===========================

    @SecurePostMapping(value = "/resource/createResource", roles = "ROLE_ADMIN", permission = "resource:create")
    @Operation(summary = "创建课程资源")
    Result<EduResourceVO> createResource(@RequestBody EduResourceDTO dto);

    @SecurePostMapping(value = "/resource/getResourceById/{id}", roles = {"ADMIN"}, permission = "resource:retrieve")
    @Operation(summary = "根据ID获取资源详情")
    Result<EduResourceVO> getResourceById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/resource/updateResource", roles = "ROLE_ADMIN", permission = "resource:update")
    @Operation(summary = "更新课程资源信息")
    Result<EduResourceVO> updateResource(@RequestBody EduResourceDTO dto);

    @SecurePostMapping(value = "/resource/deleteResource/{id}", roles = {"ADMIN"}, permission = "resource:delete")
    @Operation(summary = "删除指定资源")
    Result<Void> deleteResource(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/resource/getResourceList", roles = "ROLE_ADMIN", permission = "resource:read")
    @Operation(summary = "获取课程资源列表")
    Result<List<EduResourceVO>> getResourceList();

    // =========================== 学校管理相关接口 ===========================

    @SecurePostMapping(value = "/school/createSchool", roles = "ROLE_ADMIN", permission = "school:create")
    @Operation(summary = "创建学校")
    Result<EduSchoolVO> createSchool(@RequestBody EduSchoolDTO dto);

    @SecurePostMapping(value = "/school/getSchoolById/{id}", roles = {"ADMIN"}, permission = "school:retrieve")
    @Operation(summary = "根据ID获取学校详情")
    Result<EduSchoolVO> getSchoolById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/school/deleteSchool/{id}", roles = {"ADMIN"}, permission = "school:delete")
    @Operation(summary = "删除指定学校")
    Result<Void> deleteSchool(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/school/getSchoolList", roles = "ROLE_ADMIN", permission = "school:read")
    @Operation(summary = "获取学校列表")
    Result<List<EduSchoolVO>> getSchoolList();

    // =========================== 学生成绩管理相关接口 ===========================

    @SecurePostMapping(value = "/student-grade/createStudentGrade", roles = "ROLE_ADMIN", permission = "student-grade:create")
    @Operation(summary = "创建学生成绩")
    Result<EduStudentGradeVO> createStudentGrade(@RequestBody EduStudentGradeDTO dto);

    @SecurePostMapping(value = "/student-grade/getStudentGradeById/{id}", roles = {"ADMIN"}, permission = "student-grade:retrieve")
    @Operation(summary = "根据ID获取学生成绩详情")
    Result<EduStudentGradeVO> getStudentGradeById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/student-grade/deleteStudentGrade/{id}", roles = {"ADMIN"}, permission = "student-grade:delete")
    @Operation(summary = "删除指定学生成绩")
    Result<Void> deleteStudentGrade(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/student-grade/getStudentGradeList", roles = "ROLE_ADMIN", permission = "student-grade:read")
    @Operation(summary = "获取学生成绩列表")
    Result<List<EduStudentGradeVO>> getStudentGradeList();

    // =========================== 预警日志管理相关接口 ===========================

    @SecurePostMapping(value = "/warning-log/createWarningLog", roles = "ROLE_ADMIN", permission = "warning-log:create")
    @Operation(summary = "创建预警日志")
    Result<EduWarningLogVO> createWarningLog(@RequestBody EduWarningLogDTO dto);

    @SecurePostMapping(value = "/warning-log/getWarningLogById/{id}", roles = {"ADMIN"}, permission = "warning-log:retrieve")
    @Operation(summary = "根据ID获取预警日志详情")
    Result<EduWarningLogVO> getWarningLogById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/warning-log/deleteWarningLog/{id}", roles = {"ADMIN"}, permission = "warning-log:delete")
    @Operation(summary = "删除指定预警日志")
    Result<Void> deleteWarningLog(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/warning-log/getWarningLogList", roles = "ROLE_ADMIN", permission = "warning-log:read")
    @Operation(summary = "获取预警日志列表")
    Result<List<EduWarningLogVO>> getWarningLogList();

    // =========================== 预警规则管理相关接口 ===========================

    @SecurePostMapping(value = "/warning-rule/createWarningRule", roles = "ROLE_ADMIN", permission = "warning-rule:create")
    @Operation(summary = "创建预警规则")
    Result<EduWarningRuleVO> createWarningRule(@RequestBody EduWarningRuleDTO dto);

    @SecurePostMapping(value = "/warning-rule/getWarningRuleById/{id}", roles = {"ADMIN"}, permission = "warning-rule:retrieve")
    @Operation(summary = "根据ID获取预警规则详情")
    Result<EduWarningRuleVO> getWarningRuleById(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/warning-rule/deleteWarningRule/{id}", roles = {"ADMIN"}, permission = "warning-rule:delete")
    @Operation(summary = "删除指定预警规则")
    Result<Void> deleteWarningRule(@PathVariable("id") Long id);

    @SecurePostMapping(value = "/warning-rule/getWarningRuleList", roles = "ROLE_ADMIN", permission = "warning-rule:read")
    @Operation(summary = "获取预警规则列表")
    Result<List<EduWarningRuleVO>> getWarningRuleList();
}